package com.knowledge.plus.泛型.类型擦除;

/**
 * 类型擦除 demo2
 *
 * @author aFei
 * @since 2023/10/30
 */
class Demo2<T> {

    /**
     * 在该泛型类中定义了一个属性 num，该属性的数据类型是泛型类声明的类型参数 T ，
     * 这个 T 具体是什么类型，我们也不知道，它只与外部传入的数据类型有关
     */
    private T num;

}

/*

将这个泛型类反编译结果如下：

class Demo2 {
	public Demo2() {}    // 默认构造器，不用管
    private Object num;     // T 被替换为 Object 类型
}
可以发现编译器擦除了 Demo2 类后面的泛型标识 < T >，并且将 num 的数据类型替换为 Object 类型，
而替换了 T 的数据类型我们称之为原始数据类型

那么是不是所有的类型参数被擦除后都以 Object 类进行替换呢？
** 答案是否定的，大部分情况下，类型参数 T 被擦除后都会以 Object 类进行替换；
** 而有一种情况则不是，那就是使用到了 extends 和 super 语法的有界类型参数（即泛型通配符）

*/
